package main

import "fmt"

func main() {
	// 切片（slice）是对数组的一个连续片段的引用，所以切片是一个引用类型
	// slice：表示目标切片对象；
	// 开始位置：对应目标切片对象的索引；
	// 结束位置：对应目标切片的结束索引。
	var a = [3]int{1, 2, 3}
	fmt.Println(a, a[1:2]) // 从索引 1 开始，到索引 2 结束，但不包含索引 2 对应的元素
	fmt.Println(a[:])      // 从头到尾

	var numList []int // 声明一个整型切片变量，默认值为 nil
	fmt.Println(numList == nil)
	var numListEmpty = []int{} // 声明并初始化一个空的整型切片变量，长度和容量均为 0
	fmt.Println(numListEmpty == nil)

}

// 从数组或切片生成新的切片拥有如下特性：
// 取出的元素数量为：结束位置 - 开始位置；
// 取出元素不包含结束位置对应的索引，切片最后一个元素使用 slice[len(slice)] 获取；
// 当缺省开始位置时，表示从连续区域开头到结束位置；
// 当缺省结束位置时，表示从开始位置到整个连续区域末尾；
// 两者同时缺省时，与切片本身等效；
// 两者同时为 0 时，等效于空切片，一般用于切片复位。
